速率限制是一種限制網(wǎng)絡流量以防止用戶耗盡系統(tǒng)資源的技術(shù)。速率限制使惡意行為者更難使系統(tǒng)負擔過重并導致拒絕服務(DoS) 等攻擊。這涉及攻擊者向目標系統(tǒng)發(fā)送請求并消耗過多的網(wǎng)絡容量、存儲和內(nèi)存。
使用速率限制的 API 可以限制或暫時阻止任何試圖進行過多 API 調(diào)用的客戶端。它可能會在指定時間內(nèi)減慢受限用戶的請求或完全拒絕它們。速率限制可確保合法請求可以到達系統(tǒng)并訪問信息,而不會影響整體應用程序的性能。這是關(guān)于網(wǎng)站安全的系列文章的一部分。
為什么速率限制很重要?
速率限制是現(xiàn)代網(wǎng)絡安全策略的重要組成部分。它解決了影響傳入請求率的幾種攻擊技術(shù)。
分布式拒絕服務 (DDoS)
DDoS 攻擊試圖用流量淹沒目標系統(tǒng),使其對合法用戶不可用。速率限制通過防止任何給定流量源發(fā)送過多請求來減輕 DDoS威脅。然而,DDoS 攻擊具有獨特的挑戰(zhàn),因為它們在許多不同的來源(有時是數(shù)百萬個 IP 地址)之間分發(fā)請求。分發(fā)攻擊允許每個源避免超過速率限制。安全解決方案應將來自不同位置的請求識別為單一攻擊的一部分,并將它們視為單一來源。
憑據(jù)填充
當攻擊者破壞包含用戶憑據(jù)的數(shù)據(jù)庫時,他們可以使用這些憑據(jù)進行進一步的攻擊。通常,機器人會將竊取的用戶憑證填充到登錄表單中,直到憑證集起作用,從而允許機器人訪問帳戶。機器人通常非常成功,因為它們可以將數(shù)百或數(shù)千個憑據(jù)提交到登錄表單中。速率限制有助于識別信用填充并在機器人接管帳戶之前阻止它們。
蠻力
暴力攻擊類似于憑據(jù)填充攻擊,但沒有真實用戶憑據(jù)列表。在這種情況下,機器人會系統(tǒng)地提交隨機生成的憑據(jù),直到憑據(jù)集起作用。高度安全的 Web 應用程序設置密碼要求有助于減輕暴力攻擊,但大型攻擊仍會消耗許多網(wǎng)絡資源。速率限制阻止這些攻擊以節(jié)省系統(tǒng)資源。
數(shù)據(jù)抓取和盜竊
惡意行為者經(jīng)常抓取目標網(wǎng)站以獲取他們可以出售或用來削弱競爭對手的信息。例如,攻擊者可能會竊取電子商務公司的定價信息。爬蟲機器人可以從目標應用程序復制大量數(shù)據(jù)。速率限制檢測并阻止數(shù)據(jù)抓取。
庫存拒絕
庫存拒絕或庫存囤積攻擊涉及將機器人發(fā)送到目標 Web 應用程序,在那里它們開始交易而不完成交易。它囤積庫存,使合法用戶無法使用。
在我們的詳細指南中了解更多信息:
- 機器人
- 機器人管理
速率限制如何工作?
速率限制在應用程序中起作用,而不是在 Web 服務器中起作用。速率限制通常涉及跟蹤發(fā)出請求的 IP 地址并識別請求之間的時間間隔。IP 地址是應用程序識別每個請求的發(fā)出者的主要方式。
速率限制解決方案通過測量來自給定 IP 地址的每個請求之間經(jīng)過的時間并跟蹤在設定時間范圍內(nèi)發(fā)出的請求數(shù)來工作。如果一個 IP 地址在指定的時間范圍內(nèi)發(fā)出過多請求,則速率限制解決方案會限制該 IP 地址,并且不會在下一個時間范圍內(nèi)滿足其請求。
如果個人用戶過于頻繁地發(fā)出請求,限速應用程序可以告訴他們放慢速度。這好比警察攔下超速司機,或者父母告訴孩子不要在短時間內(nèi)吃太多糖。
速率限制的類型
管理員可以在設置速率限制時定義不同的參數(shù)和方法以及參數(shù)。組織選擇的速率限制技術(shù)取決于目標和所需的限制級別。以下是組織可能實施的三種主要速率限制方法:
- 用戶速率限制——這是最流行的速率限制方法。它通常通過跟蹤用戶的 IP 地址或 API 密鑰來識別給定用戶發(fā)出的請求數(shù)。超過指定速率限制的用戶將觸發(fā)應用程序拒絕任何進一步的請求,直到速率限制時間范圍重置。或者,用戶可以聯(lián)系開發(fā)人員以提高速率限制。
- 地理速率限制——開發(fā)人員可以通過在指定時間范圍內(nèi)為每個特定區(qū)域設置速率限制來進一步保護給定地理區(qū)域中的應用程序。例如,開發(fā)人員可能會預測給定區(qū)域的用戶在午夜和上午 9:00 之間的活躍度較低,并為此時間范圍定義較低的速率限制。這種方法有助于防止可疑流量并進一步降低攻擊風險。
- 服務器速率限制——開發(fā)人員可以在服務器級別設置速率限制,如果他們定義了一個特定的服務器來處理應用程序的某些部分。這種方法提供了更大的靈活性,允許開發(fā)人員提高常用服務器的速率限制,同時降低不太活躍的服務器的流量限制。
用于速率限制的算法是什么?
有幾種類型的速率限制算法。
固定窗口速率限制
固定窗口速率限制算法限制在給定時間范圍(窗口)內(nèi)允許的請求數(shù)。例如,服務器的限速組件可能實施一種算法,每分鐘最多接受 200 個 API 請求。有一個從指定時間開始的固定時間范圍——服務器在 9:00 到 9:01 之間不會處理超過 200 個請求,但窗口將在 9:01 重置,允許另外 200 個請求直到 9:02。
開發(fā)人員可以在服務器或用戶級別實現(xiàn)固定窗口算法。在用戶級別實施該算法將限制每個用戶每分鐘 200 個請求。相比之下,服務器級別的算法將限制服務器,這意味著所有用戶加起來每分鐘最多可以發(fā)出 200 個請求。
漏桶限速
漏桶速率限制算法與固定窗口算法不同,因為它們不依賴于指定的時間范圍。他們專注于請求隊列的固定長度,而沒有考慮時間。服務器將按照先到先得的原則為請求提供服務。新請求加入隊列的后面。如果新請求在隊列已滿時到達,服務器將丟棄該請求。
滑動窗口速率限制
滑動窗口速率限制算法與固定窗口算法類似,只是每個時間窗口的起始點不同。使用滑動窗口速率限制,時間范圍僅在用戶發(fā)出新請求時開始,而不是預定時間。例如,如果第一個請求在上午 9:00:24 到達(并且速率限制為每分鐘 200 個),則服務器將在 9:01:24 之前允許最多 200 個請求。滑動窗口算法有助于解決固定窗口限速中影響請求的問題。它們還通過提供更大的靈活性來緩解漏桶速率限制所面臨的饑餓問題。